package com.selen.service;

import com.github.pagehelper.PageInfo;
import com.selen.dto.*;
import com.selen.entities.Emp;
import com.selen.entities.Role;
import com.selen.vo.LoginVO;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * @author Selen
 */
@Service
public interface EmpService {

    /**
     * 添加一条员工记录
     *
     * @param dto 员工添加实体
     * @return 影响条目数
     */
    int insert(EmpInsertDTO dto);

    /**
     * 按主键查一条员工记录
     *
     * @param id 员工表主键
     * @return 一条员工记录
     */
    Emp selectById(Long id);

    /**
     * 按主键修改一条员工记录
     *
     * @param dto 员工修改实体
     * @return 影响条目数
     */
    int updateById(EmpUpdateDTO dto);

    /**
     * 按主键逻辑删除一条员工记录
     *
     * @param id 员工表主键
     * @return 影响条目数
     */
    int logicDeleteById(Long id);

    /**
     * 按主键列表逻辑删除多条员工记录
     *
     * @param ids 员工表主键列表
     * @return 影响条目数
     */
    int logicDeleteByIds(List<Long> ids);

    /**
     * 查询全部记录
     *
     * @return 全部记录
     */
    List<Emp> selectAll();

    /**
     * 分页查询数据
     *
     * @param dto 分页实体类
     * @return 分页数据
     */
    PageInfo<Emp> page(PageDTO dto);

    /**
     * 登录
     * @param dto 用户登录DTO
     * @return LoginVO ： token密钥，permission权限
     */
    LoginVO login(LoginDTO dto);

    /**
     * 真实姓名模糊查询
     * @param dto 分页DTO
     * @return 分页数据
     */
    PageInfo<Emp> dimSelect(EmpPageDTO dto);

    /**
     * 上传员工头像
     *
     * @param dto 头像文件
     * @return 文件名
     */
    String uploadAvatar(EmpUploadDTO dto);

    /**
     * 重置员工密码
     * @param id 员工id
     * @return 影响条目数
     */
    String resetPassword(Long id);

    /**
     * 获取员工角色
     * @param id 员工id
     * @return 角色列表
     */
    List<Role> getRoles(Long id);

    /**
     * 修改员工的角色列表
     * @param dto 员工主键 + 角色id集合
     * @return
     */
    int updateRoles(EmpRoleDTO dto);

    /**
     * 修改员工密码
     * @param dto 员工id + 旧密码 + 新密码
     * @return 影响条目数
     */
    int updatePassword(EmpUpdatePasswordDTO dto);

}
